import {
	getToken,
	removeToken
} from '@/utils/auth'
import common from '@/assets/js/common.js'
import store from '@/store'

// 基础配置
const baseConfig = {
	baseURL: process.env.NODE_ENV === 'development' ?
		'https://box.jingkakeji.com/api' : 'https://box.jingkakeji.com/api',
	timeout: 60000
}

// 请求拦截处理
const requestInterceptor = (config) => {
	// 签名处理
	let getUrl = common.qianming(config)
	config.url = config.url.indexOf('?') !== -1 ?
		`${config.url}&${getUrl}` :
		`${config.url}?${getUrl}`

	// Token处理
	const token = getToken()
	// if (token) {
	// console.log(token,"111111")

	config.header = {
		...config.header,
		'Authorization': `Bearer ${uni.getStorageSync("token")}`
	}
	// }
	return config
}

// 响应拦截处理
const responseInterceptor = (response) => {
	const {
		data
	} = response
	if (data.code === 500 && response.config.url.indexOf('/red') === -1) {
		uni.showToast({
			title: data.message,
			icon: 'none',
			duration: 3000
		})
	}

	if (data.code === 401) {
		uni.showToast({
			title: store.state.lang === 'en' ? 'login' : data.message,
			icon: 'none',
			duration: 3000
		})
		removeToken()
		store.commit('USER_INFO', {})
		store.commit('LOGIN_IS_SHOW', true)
		uni.navigateTo({
			url: "/pages/Login/Login"
		})
		// uni.navigateTo({ url: "" })
		return Promise.reject(data)
	}
	return data
}

// 错误处理
const errorHandler = (error) => {
	if (error.message && error.message.indexOf('401') !== -1) {
		uni.showToast({
			title: store.state.lang === 'en' ? 'login' : '未登录',
			icon: 'none',
			duration: 3000
		})
		removeToken()
		store.commit('LOGIN_IS_SHOW', true)
		store.commit('USER_INFO', {})
	}
	return Promise.reject(error)
}

// 核心请求函数
export const request = (options) => {
	return new Promise((resolve, reject) => {
		// 合并配置
		const config = {
			...baseConfig,
			...options,
			// 这里保持相对路径，供签名与拼接 query 使用
			url: options.url
		}

		// 请求拦截
		try {
			const interceptedConfig = requestInterceptor(config)

			// 发起请求（签名与 query 已处理，此处再拼接 baseURL）
			uni.request({
				...interceptedConfig,
				url: `${baseConfig.baseURL}${interceptedConfig.url}`,
				success: (response) => {
					try {
						const result = responseInterceptor(response)
						resolve(result)
					} catch (err) {
						reject(err)
					}
				},
				fail: (error) => {
					errorHandler(error)
					reject(error)
				}
			})
		} catch (err) {
			reject(err)
		}
	})
}